package com.tedu.api.list;

import org.junit.Test;
/**
 * 导入包问题：同一包下的类需要导入
 *           import java.util.ArrayList;
 *            import java.util.List;
 *通配符 *   匹配当前包【文件夹】下所有类
 *         import java.util.*
 */
import java.util.*;

/**
 * List集合
 * Collection顶级集合【容器】----List集合【子接口】
 * List集合存储数据：存储有序并且重复的元素
 * List集合---接口---无法创建对象
 * 实现类：
 * ArrayList：【常用：List与ArrayList的方法完全一致】数组实现
 * LinkedList：双向连接实现
 * Vector：
 * 重点：掌握list接口集合中所有方法
 */
public class ListAPI {
    /**
     * get(int index)     返回值：E ---理解：Object
     * 作用：获取给定下标处的元素，从0开始
     */
    @Test
    public void testGet(){
        //List集合 ---多态创建集合
        List<String> list=new ArrayList<>();
        list.add("三生三世");
        list.add("你的名字");
        list.add("抓娃娃");
        System.out.println("List集合："+list);
        //获取到：List集合中元素叫：你的名字
        String str=list.get(1);
        System.out.println("获取集合中："+str);
        //需求：获取：List集合中所有的元素  ---普通for
        for(int i=0;i<list.size();i++){//针对集合----下标：从0开始
           list.get(i);
            System.out.println("遍历List集合："+str);
        }
        /**
         * set(int index, E e) 返回值：E
         * 作用：将给定元素设置指定到下标位置处
         */

        /**List继承Collection[重载：拓展功能]
         * add（int index,E e）    返回值：void
         * 作用：将给定元素插入指定位置【指定位置前面插入】
         * remove（int index）     返回值：E
         *作用：将给定位置的元素从集合中删除
         *
         * 特点：查询快、增删慢---选择List/ArrayList
         */

    }
    @Test
    public void testAR(){
        //创建List集合---重写方法add() 重载方法add(下标，"元素")
        List<String> list=new ArrayList<>();
        list.add("秦始皇");   list.add("汉武帝");
        list.add("王安石");   list.add("潘金驴");
        System.out.println("List集合元素:" +list);
        list.add(3,"武大郎");
        System.out.println("List集合元素："+list);
        list.remove(2);
        System.out.println("List集合元素："+list);

    }

    /**
     * List集合
     * subList(int start，int end)    返回值：List<E>
     * 作用：截取范围内子集   口诀：含头不含尾
     */
    @Test
    public void testSubList(){
        //创建一个集合,10个元素：0~9
        List<Integer> list=new ArrayList<>();
        for(int i=0; i<10;i++){//i 循环针对下标
            list.add(i);
        }
        System.out.println("List集合："+list);
        //获取子集：list集合元素中3~8之间元素
        List<Integer>listch=list.subList(3,9);
        System.out.println("获取子集："+listch);
        System.out.println("List集合："+list);
        //获取子集：list集合元素中2~6之间元素，子集元素扩大10倍
        //1.从List集合中，取2~6之前元素
        List<Integer>lch=list.subList(2,7);
        //2.for循环遍历子集，遍历同时给每个下标的元素*10
        for (int i=0;i<lch.size();i++){ //i  获取下标   0~4
            lch.set(i,lch.get(i)*10);
        }
        System.out.println("子集扩大10倍元素："+lch);
        /**
         *   需求：删掉 lch子集     输出：list   【0，1，7，8，9】
         *   特点：清空clear以及设置set直接对集合做操作
         */
        System.out.println("【List】"+list);
        lch.clear();
        System.out.println("清空子集：【List】"+list);
        //提示：size（）获取子集长度 ser(下标，获取元素*10)设置每个元素下标元素
        //     get(下标)获取元素*10
    }

    /**
     * 集合排序
     * Random  伪随即类    包位置：java.util
     *
     * Collections  集合工具类  静态方法：sort
     * sort()方法：针对集合元素是数值进行排序【默认：升序】！ 返回值：List
     *
     * 需求：随机生成10个元素【整数：100以内】的集合---对集合排序
     *
     */
    @Test
    public void testArrayList(){
        //创建List集合<整数>
        List<Integer> list=new ArrayList<>();
        //创建伪随机数
        Random r=new Random();
        for (int i=0;i<10;i++){ //10个元素
            list.add(r.nextInt(100));  //100以内
        }
        System.out.println("打印List："+list);
        //对list集合元素进行排序  Collections.sort（集合）
        Collections.sort(list);
        System.out.println("【有排序】打印list："+list);
    }

    /**
     * 需求：创建集合，存汉字，排序--能排【没规则】
     */
    @Test
    public void testCompartor(){
        //创建集合--存：汉字
        List<String> list=new ArrayList<>();
        list.add("阿西吧");
        list.add("搜都寺内");
        list.add("吆西");
        Collections.sort(list);
        System.out.println("排序后集合："+list);
    }
}
























